package LeetCode;

import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;

/**
 * @author VX5
 * @Title: MJC
 * @ProjectName DataStructure
 * @Description: TODO
 * @date ${DAT}17:08
 */
public class E8Pro {//还可以用递归优化

    public static void main(String[] args) {
        Print1ToMaxOfNDigits(3);
    }
    public static void Print1ToMaxOfNDigits(int n){
        if (n <=0){
            throw new RuntimeException("n必须大于0");
        }
        char[] number = new char[n+1];
        for (int i = 0; i < n;i++){
            number[i] = '0';
        }
        while (!Increment(number)){
            PrintNumber(number);
        }
    }

    //判断函数 主要是进位
    static boolean Increment(char[] number) {
        boolean isOverFlow = false;
        int nTakeOver = 0;
        int nLength = number.length;
        for (int i = number.length - 1; i >= 0; i--) {//因为数字的位数和数组的顺序是反着的
            int nSum = number[i] - '0' + nTakeOver;//'0'=48 这这里是直接将字符串转化为整数  nTakeOver此处事上一位的进位情况
            if (i == number.length - 1) {//个位
                nSum++;
            }
            if (nSum >= 10) {//出现要进位的情况
                if (i == 0) {//为首位
                    isOverFlow = true;//停止循环
                } else {
                    nSum -= 10;
                    nTakeOver = 1;
                    number[i] = (char) ('0' + nSum);//进位后的数字
                }
            } else {
                number[i] = (char) ('0' + nSum);
                break;
            }
        }
        return isOverFlow;
    }

    static void PrintNumber(char[] number){
        boolean flag=true; // 当前位还是0则为ture
        for(int i=1; i<number.length; i++){
            if(flag && number[i] != '0')
                flag = false;
            if(!flag && i==number.length-1){//个位数
                System.out.print(number[i]);
                break;
            }
            if(!flag)
                System.out.print(number[i]);
        }
        System.out.printf("\t");
    }
}
